package com.ys.io.IO流.p2trywithresources;

import java.util.Scanner;

/**
 * try with resources  是一个try时的编译技术,thows时能都自动帮我们catch和final关闭资源
 * <p>
 * JDK7的一个新特性。弱化了finally，Java程序在运行时能够自动关闭资源。
 * <p>
 * 注意：使用try with resource关闭资源try必须有，catch可有可无
 * <p>
 * 使用传统的try catch finally当资源关闭的情况下，再次进行输入运行期就会抛出IllegalStateException
 * <p>
 * 场景：使用Scanner完成数据的输入，然后使用try with resource关闭资源0
 * * 步骤: 1 定义try with resources
 * *      2 创建Scanner对象
 * *      3 输入数据
 * *      4 打印输入的数据
 * * 小结：什么样的代码能够定义在try with resources里面？
 * *      只要实现了AutoCloseable接口的类都可以定义在try with resources里面
 * *      AutoCloseable(Since JDK7) 自动关闭资源的接口
 * *
 * *      Closeable
 * *
 * *      Scanner
 */
public class JDK7自动关闭资源 {

    public static void main(String[] args) {
//        try with resources
        // 可以把错误约束到编译时期,由编译器,帮我们自动 close关闭资源.(自动添加obj.close)
        //Scanner implements  Closeable  extends AutoCloseable
        // 只要实现了 Closeable 的类都可以交给 try with resources  来关闭资源\
//        try 的变量范围在 最近的{}里
        try (Scanner input = new Scanner(System.in);) {
            System.out.println("请输入姓名:");
            String name = input.next();
            System.out.println(name);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //input.next(); 就无法拿到变量了
    }
}


/*
*
编译后的 帮我们自动添加了final 关闭资源
import java.io.PrintStream;
import java.util.Scanner;

public class java01
{
  public static void main(String[] paramArrayOfString)
  {
    try
    {
      Scanner localScanner = new Scanner(System.in);Object localObject1 = null;
      try
      {
        System.out.println("请输入姓名:");
        String str = localScanner.next();
        System.out.println(str);
      }
      catch (Throwable localThrowable2)
      {
        localObject1 = localThrowable2;throw localThrowable2;
      }
      finally
      {
        if (localScanner != null) {
          if (localObject1 != null) {
            try
            {
              localScanner.close();
            }
            catch (Throwable localThrowable3)
            {
              localObject1.addSuppressed(localThrowable3);
            }
          } else {
            localScanner.close();
          }
        }
      }
    }
    catch (Exception localException)
    {
      localException.printStackTrace();
    }
  }
}




*/
